﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Threading;

namespace MyClassSocket
{
    class ChatMan_srv
    {
        CServidor Servidor = new CServidor(7300);

        public void Run()
        {
            Thread SrvRun = new Thread(new ThreadStart(Servidor.Run));
            SrvRun.Start();

            while(true)
                Logica_svr();
        }

        private void Logica_svr()
        {
            CPaq_Msg[] paq_msg = new CPaq_Msg[Servidor.conexionesEstablecidas];
            while (Servidor.conexionesEstablecidas > 1)
            {
                //primero escucho todas las peticiones
                //aca se que son todas con mensajes nuevos
                //para mostrar en los clientes
                Servidor.listenToClient();

                //aca es simple, manejo un solo paq que es el de msg
                //mas adelante por alli lo ideal sea mandar un paq de presentacion o algo medio loco

                //Obtengo todo los paq que me enviaron todos los clintes
                for (int i = 0; i < Servidor.conexionesEstablecidas; i++)
                {
                    paq_msg[i] = new CPaq_Msg();
                    paq_msg[i] = (CPaq_Msg) CSRepositor.Desempaquetar(Servidor.paq[i]);                    
                }

                //aca iria un proceso logico si tuviera alguno xD
                //
                //


                //Contesto a todos los paquetes
                //en este caso, contesto a todos con el mensaje que escribio el cliente
                //es decir, solo redirecciono el paq a los demas clientes
                byte[] empaquetado = new byte[1024];
                for (int i = 0; i < Servidor.conexionesEstablecidas; i++)
                {
                    //aca tengo que enviarle a todos los clientes el mismo paq
                    empaquetado = CSRepositor.Empaquetar((object)paq_msg[i]);

                    for (int y = 0; y < Servidor.conexionesEstablecidas; y++)
                    {
                        if (y != paq_msg[i].ID)
                            Servidor.sockCliente[y].Send(empaquetado);
                    }
                }

                
            }
        }
    }
}
